﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TTApp.Phone.Silverlight.Hexagons;

    // By AnhNT

namespace TTApp.Phone.Silverlight.Hexagons
{
    /// <summary>
    /// Class biểu thì cho việc nếu đi nước startHexagonSlot > endHexagonSlot thì sẽ kì vọng nhận được bao nhiêu điểm
    /// </summary>
    class RouteHexagonSlot
    {
        /// <summary>
        /// Điểm đầu của lộ trình (Vị trí của Hexagon xuất phát)
        /// </summary>
        private HexagonSlot startHexagonSlot;

        public HexagonSlot StartHexagonSlot
        {
            get { return startHexagonSlot; }
        }
        
        /// <summary>
        /// Điểm cuối của lộ trình (Vị trí của Hexagon đích)
        /// </summary>
        private HexagonSlot endHexagonSlot;

        public HexagonSlot EndHexagonSlot
        {
            get { return endHexagonSlot; }
        }

        /// <summary>
        /// Điểm kỳ vọng nhận được nếu đi nước này
        /// </summary>
        private int point;

        public int Point
        {
            get { return point; }
        }

        /// <summary>
        /// Truyền vào điểm đầu điểm cuối sẽ tự tính số điểm kỳ vọng
        /// </summary>
        /// <param name="startHexagonSlot">Vị trí của Hexagon xuất phát</param>
        /// <param name="endHexagonSlot">Vị trí của Hexagon đích</param>
        public RouteHexagonSlot(HexagonSlot startHexagonSlot, HexagonSlot endHexagonSlot)
        {
            this.startHexagonSlot = startHexagonSlot;
            this.endHexagonSlot = endHexagonSlot;
            CaculatePoint();
        }

        /// <summary>
        /// Cách thức tính điểm như sau
        /// +1 Nếu như startHexagonSlot và endHexagonSlot là hàng xóm cấp 1 của nhau
        /// +2 cho mỗi Hexagon biến được của đối phương thành của mình (do đối phương mất 1 điểm và mình được 1 điểm)
        /// </summary>
        private void CaculatePoint()
        {
            point = 0;
            if (startHexagonSlot.GetNeighbours(1).Contains(endHexagonSlot))
                point++;
            foreach (HexagonSlot hexagonSlot in endHexagonSlot.GetNeighbours(1))
            {
                if (hexagonSlot != null)
                    if (hexagonSlot.Hexagon != null)
                        if (hexagonSlot.Hexagon.Image != startHexagonSlot.Hexagon.Image)
                            point += 2;
            }
        }
    }
}
